
#abrindo arquivo do trace
f = open('out.tr')

#numero de pacotes de roteamento
pacs_rot = 0
#numero de pacotes de dados
pacs_dados = 0


#tempo ate encontrar rota alternativa depois do enlace falhar
tempo1 = 0
#tempo ate voltar a rota original depois do enlace voltar
tempo2 = 0

procurandoRotaAlternativa = False
procurandoRotaOriginal = False

#enlace em que ocorre a falha - considerando o sentido do fluxo de dados
noOrigemFalha = '3'
noFimFalha = '6'


for linha in f:
	#lendo linha
	type1, rest = linha.split(" ", 1)
	
	if type1 == 'v':
		# formato de linha do trace
		#v 2 link-up 6 3 
		time, type0, n1, n2 = rest.split(" ")
		
		#inicio falha
		if type0 == 'link-down':
			if procurandoRotaAlternativa != True:
				procurandoRotaAlternativa = True
				tempoInicioFalha = time

			

		#volta falha
		elif type0 == 'link-up':
			if procurandoRotaOriginal != True:
				procurandoRotaOriginal = True
				tempoVoltaFalha = time

			

	elif (type1 == 'r') or (type1 == '+') or (type1 == '-'):
		
		# formato de linha do trace
		#- 2.02004 6 5 rtProtoDV 10 ------- 0 6.1 5.1 -1 470
		time, nfrom, nto, type2, band, space, a, b, c, d, e = rest.split(" ")
		
		if type2 == 'rtProtoDV' or type2 == 'rtProtoLS':
			#incrementa o numero de pacotes de roteamento
			pacs_rot += 1
		
		if type2 == 'cbr' or type2 == 'exp':
			#incrementa o numero de pacotes de dados
			pacs_dados += 1


			if (nfrom == noOrigemFalha) and procurandoRotaAlternativa:
				procurandoRotaAlternativa = False
				tempo1 = float(time) - float(tempoInicioFalha)
			if (nfrom == noOrigemFalha) and (nto == noFimFalha) and procurandoRotaOriginal:
				procurandoRotaOriginal = False
				tempo2 = float(time) - float(tempoVoltaFalha)

	

f.close()
print '--- Resultados ---'
print 'Pacotes de roteamento: %d' % pacs_rot
print 'Pacotes de dados: %d' %pacs_dados
print 'Tempo para encontrar uma rota alternativa: %f' %tempo1
print 'Tempo para voltar a rota original: %f' %tempo2
